package idv.kentYeh.util;

import java.util.List;

/**
 *
 * 物件供應器，物件總量太大時，分段取出物件
 * @author Kent Yeh
 */
public interface Supplier<T> {

    /**
     * 一次取得一定數量之物件
     * @return 
     */
    List<T> request();

    /**
     * 一次取得一定數量之物件
     * @param size 取出之最大數量
     * @return 
     */
    List<T> request(int size);

    /**
     * 取出下一個物件
     * @return 
     */
    T next();

    /**
     * 尚有物件未取出嗎?
     * @return 
     */
    boolean hasNext();

    /**
     * 前次取出之物件，若重置或尚未曾取出，則回傳NULL
     * @return 
     */
    T previous();

    /**
     * 重置供應器到未曾取出之狀態
     */
    void reset();
}
